_CONTROL87

#include <float.h>
            
            unsigned int _control87(new,mask); получает слово уп-
                                               равления плавающей
                                               точки
            
            unsigned int new;          	 новые    значения
                                               битов       слова
                                               управления
            
            unsigned int mask;       	 устанавливаемая
                                               маска   для новых
                                               битов слова управ-
                                               ления

Описание.
Функция _control87 получает и устанавливает слово управления плавающей точки. Слово управления плавающей точки позволяет изменять в программе режимы точности, округления и бесконечности для математического пакета программ с плавающей точкой. Исключительные состояния с плавающей точкой также можно маскировать или размаскировать, используя для этого функцию _control87.
Если значение для mask равно 0, тогда _control87 получает слово управления с плавающей точкой. Если mask ненулевая, устанавливается новое значение для слова управления следующим образом: для любого бита равного 1 в mask соответствующий бит в new используется для обновления слова управления словами. Это записывается так:

fpcntrl=((fpcntrl & ~mask) : (new & mask)),

где fpcntrl является словом управления с плавающей точкой.

Возвращаемое значение.
Биты в возвращаемом значении обозначают состояние управления с плавающей точкой. См. include-файл <float.h> для полного описания битов, возвращаемых _control87.

Пример:

         
#include <stdio.h>
#include <float.h>

double a = .1;
            
main()
{
/* получает слово управления */
               printf("control=%.4x\n", _control87(0,0));
               printf("a*a=.01=%.15e\n",a*a);
            
/* устанавливает точность в 24 бита */
               _control87(PC_24, MCW_PC);
               printf("a*a=.01(rounded to 24 bits)=%.15e\n",a*a);
            
/* восстанавливает к первоначальному умолчанию */
               _control87(CW_DEFAULT, 0xffff);
               printf("a*a=.01=%.15e\n",a*a);
}

Hosted by uCoz